package com.cetc.lambda;

import org.junit.Test;

import java.util.Comparator;
import java.util.function.Consumer;

/**
 * (o1,o2) -> Integer.compare(o1,o2);
 * ->:lambda操作符
 * 左边：形参列表（其实就是形参列表中的抽象方法的形参列表））
 * 右边：lambda体（其实就是重写的抽象方法的方法体））
 * lambda使用分为6中情况：
 *
 * @Classname LambdaTest
 * @Description lambda表达式的使用
 * @Date 2022/12/23 16:31
 * @Created by louzhuangxi
 */
public class LamdbaTest {

    /**
     * 无参数，无返回值
     */
    @Test
    public void test01() {
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("hello world");
            }
        };
        r1.run();
        System.out.println("*************************");

        Runnable r2 = () -> System.out.println("hello world");
        r2.run();
    }

    /**
     * 有参数，无返回值
     */
    @Test
    public void test02() {
        Consumer<String> con = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        con.accept("111111");

        System.out.println("*************************");
        Consumer<String> con1 = s1 -> System.out.println(s1);
        con1.accept("222222");
    }

    /**
     * 有多个参数，有多个输出语句，有返回值
     */
    @Test
    public void test03() {
        Comparator<Integer> con = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        };

        System.out.println(con.compare(1, 2));
        System.out.println("******************************");
        Comparator<Integer> con2 = (o1, o2) -> o1.compareTo(o2);
        System.out.println(con2.compare(4, 2));
    }

    @Test
    public void test04() {
        MyInterface myInterface = () -> System.out.println("11111");
        myInterface.method1();
    }
}

